home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / game / patch / WHDIDemos.lzh / Axis_PictureBook.lha / PictureBookHD / sources / picturebookwhd.asm
Assembly Source File  |  2002-04-28  |  4KB  |  262 lines

  1. ; *** Picture Book Hard Disk Loader V1.0
  2. ; *** Written by Mick © 2001
  3.  
  4.         INCLUDE    "whdload.i"
  5.         INCLUDE    "whdmacros.i"
  6.  
  7. _base
  8.         SLAVE_HEADER            ;ws_Security + ws_ID
  9.         dc.w    10            ;ws_Version
  10.         dc.w    WHDLF_NoError        ;ws_flags
  11. _upchip
  12.         dc.l    $200000            ;ws_BaseMemSize
  13.         dc.l    $0            ;ws_ExecInstall
  14.         dc.w    _Start-_base        ;ws_GameLoader
  15.         dc.w    0            ;ws_CurrentDir
  16.         dc.w    0            ;ws_DontCache
  17. _keydebug
  18.         dc.b    0            ;ws_keydebug
  19. _keyexit
  20.         dc.b    $59            ;ws_keyexit = F10
  21.         dc.l    0
  22.         dc.w    _name-_base
  23.         dc.w    _copy-_base
  24.         dc.w    _info-_base
  25. _name
  26.         dc.b    "Picture Book",0
  27. _copy
  28.         dc.b    "1995 Axis/Polka Brothers",0
  29. _info
  30.         dc.b    "installed by Mick",10
  31.         dc.b    "V1.0 (16.10.2001)",0
  32.         cnop    0,4
  33.  
  34. _Start
  35.         lea    (_resload,pc),A1
  36.         move.l    A0,(A1)            ;save for later using
  37.  
  38.         move.l    #WCPUF_Base_WT|WCPUF_IC,D0
  39.         move.l    #WCPUF_Base|WCPUF_IC|WCPUF_DC,D1
  40.         move.l    (_resload,pc),A2
  41.         jsr    (resload_SetCPU,A2)    ; to enable caches
  42.  
  43.         lea    (CurrDisk,pc),A0
  44.         move.l    #1,(A0)
  45.  
  46.         moveq    #0,D0
  47.         move.l    #$400,D1
  48.         moveq    #1,D2
  49.         lea    $10000,A0
  50.         bsr    LoadBoot
  51.  
  52.         move.l    #$4E714E71,$1C(A0)    ; 4E7B
  53.         move.w    #$4E75,$14A(A0)    ; BFD operand
  54.         move.w    #$4E75,$128(A0)
  55.         move.w    #$4E75,$13E(A0)
  56.         move.w    #$600C,$52(A0)
  57.         patch    $78(A0),PatchIntro
  58.         patch    $80(A0),DiskRoutine
  59.         move.w    #$4E75,$166(A0)    ; BFD operand
  60.  
  61.         jmp    $16(A0)
  62.  
  63. PatchIntro
  64.         move.l    A0,-(A7)
  65.         lea    $F0000,A0
  66.         move.w    #$4E71,$1E(A0)        ; trap #0
  67.         move.l    #$4E714E71,$2A(A0)    ; 4E7B
  68.         patchs    $A2(A0),PatchLoading
  69.         patchs    $EA(A0),PatchPBLogo
  70.         patch    $142(A0),PatchMain
  71.         patch    $198(A0),FixInt
  72.         move.w    #$4E75,$3F0(A0)    ; BFD operand
  73.         move.w    #$4E75,$3CE(A0)
  74.         move.w    #$4E75,$3E4(A0)
  75.         move.w    #$600C,$316(A0)
  76.         patch    $342(A0),DiskRoutine
  77.         move.b    #$60,$27E(A0)
  78.         patch    $1AA(A0),FixInt2
  79.         patchs    $26A(A0),SetDisk2
  80.         move.l    (A7)+,A0
  81.  
  82.         jmp    $F0000
  83.  
  84. PatchLoading
  85.         bsr    Delay
  86.         bsr    Delay
  87.         clr.w    $F1A44
  88.         rts
  89.  
  90. PatchPBLogo
  91.         patch    $190072,FixInt2
  92.  
  93.         jsr    $190000
  94.         rts
  95.  
  96. PatchMain
  97.         move.l    A0,-(A7)
  98.         lea    $70000,A0
  99.         move.w    #$4E71,$1E(A0)        ; trap #0
  100.         move.w    #$4E75,$522(A0)    ; BFD operand
  101.         move.w    #$4E75,$500(A0)
  102.         move.w    #$4E75,$516(A0)
  103.         move.w    #$600C,$448(A0)
  104.         patch    $474(A0),DiskRoutine
  105.         patch    $1E0(A0),FixInt
  106.         patch    $1F2(A0),FixInt2
  107.         patch    $30B2(A0),FixInt2
  108.  
  109.         patchs    $8A(A0),PatchP1
  110.         patchs    $B2(A0),PatchP2
  111.         patchs    $E4(A0),PatchP3
  112.         patchs    $F0(A0),PatchP4
  113.         patchs    $118(A0),PatchP5
  114.         patchs    $13C(A0),PatchP6
  115.         patchs    $156(A0),PatchP7
  116.         patchs    $178(A0),PatchP8
  117.  
  118.         patchs    $336(A0),SetDisk3
  119.         patchs    $39C(A0),SetDisk4
  120.         move.l    (A7)+,A0
  121.  
  122.         jmp    $70000
  123.  
  124. PatchP1
  125.         jsr    $100000
  126.         bsr    Delay
  127.         rts
  128.  
  129. PatchP2
  130.         patch    $19A094,FixInt2
  131.         jsr    $19A000
  132.         bsr    Delay
  133.         rts
  134.  
  135. PatchP3
  136.         patch    $F0114,FixInt2
  137.         jsr    $F0000
  138.         rts
  139.  
  140. PatchP4
  141.         patch    $C0084,FixInt2
  142.         jsr    $C0000
  143.         rts
  144.  
  145. PatchP5
  146.         patch    $1001A8,FixInt2
  147.         jsr    $100000
  148.         rts
  149.  
  150. PatchP6
  151.         patch    $C00EA,FixInt2
  152.         jsr    $C0000
  153.         rts
  154.  
  155. PatchP7
  156.         patch    $E0D9C,FixInt3
  157.         patch    $E0DBE,FixInt3
  158.         patch    $E0DE8,FixInt3
  159.         jsr    $E0000
  160.  
  161. PatchP8
  162.         cmp.w    #$66F6,$C00B6
  163.         bne    Part8B
  164.         rts
  165.  
  166. Part8B
  167.         patch    $C009E,FixInt2
  168.  
  169. Go
  170.         jsr    $C0000
  171.         bsr    Delay
  172.         rts
  173.  
  174. Delay
  175.         movem.l    D0-D7/A0-A6,-(A7)
  176.         move.l    #120,D0        ;  12 seconds
  177.         move.l    (_resload,pc),A2
  178.         jsr    (resload_Delay,A2)
  179.         movem.l    (A7)+,D0-D7/A0-A6
  180.         rts
  181.  
  182. FixInt
  183.         move.w    #$20,$DFF09C
  184.         move.w    #$20,$DFF09C
  185.         nop
  186.         nop
  187.         rte
  188.  
  189. FixInt2
  190.         move.w    #$4,$DFF09C
  191.         move.w    #$4,$DFF09C
  192.         nop    
  193.         nop
  194.         rte
  195.  
  196. FixInt3
  197.         move.w    #$2000,$DFF09C
  198.         move.w    #$2000,$DFF09C
  199.         nop
  200.         nop
  201.         rte
  202.  
  203. LoadBoot
  204.         movem.l    D0-D2/A0-A2,-(A7)
  205.         move.l    (_resload,pc),A2
  206.         jsr    (resload_DiskLoad,A2)
  207.         movem.l    (A7)+,D0-D2/A0-A2
  208.         rts
  209.  
  210. DiskRoutine
  211.         movem.l    D0-D7/A0-A6,-(A7)
  212.         moveq    #0,D0
  213.         moveq    #0,D1
  214.         move.w    $2(A5),D0
  215.         move.w    (A5),D1
  216.         mulu    #$1600,D0
  217.         mulu    #$1600,D1
  218.         move.l    (CurrDisk,pc),D2
  219.         move.l    (_resload,pc),A2
  220.         jsr    (resload_DiskLoad,A2)
  221.         movem.l    (A7)+,D0-D7/A0-A6
  222.         rts
  223.  
  224. SetDisk2
  225.         move.l    A0,-(A7)
  226.         lea    (CurrDisk,pc),A0
  227.         move.l    #2,(A0)
  228.         bra    Return
  229.  
  230. SetDisk3
  231.         move.l    A0,-(A7)
  232.         lea    (CurrDisk,pc),A0
  233.         move.l    #3,(A0)
  234.         bra    Return
  235.  
  236. SetDisk4
  237.         move.l    A0,-(A7)
  238.         lea    (CurrDisk,pc),A0
  239.         move.l    #4,(A0)
  240.  
  241. Return
  242.         move.l    (A7)+,A0
  243.         move.l    #$1FE000,D2
  244.         rts
  245.  
  246. _exit
  247.         pea    TDREASON_OK
  248.         bra    _end
  249. _debug
  250.         pea    TDREASON_DEBUG
  251. _end
  252.         move.l    (_resload),-(A7)
  253.         add.l    #resload_Abort,(A7)
  254.         rts
  255.  
  256. _resload
  257.         dc.l    0            ;address of resident loader
  258.         even
  259.  
  260. CurrDisk
  261.         dc.l    0
  262.